# -*- coding: utf-8 -*-
from models import Quiniela, Jornada, Temporada
from django.shortcuts import render_to_response
from kinidj.core.views import get_config
from kinidj.core.models import Seccion
from django.forms.models import ModelForm
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required

import sys

def get_temporada (fecha_ini = None ):
    if (fecha_ini):
        temporada = Temporada.objects.filter(fecha_ini__year = fecha_ini)[0]
        return temporada
    else:
        return Temporada.get_actual()
        

def get_jornada (fecha_ini = None, jornada_id = None):
    if ( jornada_id ):
        temp = get_temporada(fecha_ini)
        for jornada in Jornada.objects.filter(temporada = temp).all():
            print jornada
            if (jornada.get_num() == int(jornada_id)):
                jornada.temporada = temp
                return jornada
        raise KeyError ("Jornada " + unicode (jornada_id) + " no encontrada")
    else:
        return Jornada.get_actual()


def get_quiniela (user , fecha_ini = None, jornada_id = None):
    jornada = get_jornada (fecha_ini, jornada_id)
    return Quiniela.objects.filter(jornada = jornada).all().filter(user = user).all()[0]
    

def temporada (request, fecha_ini = None):
    try:
        temporada = get_temporada(fecha_ini)
        jornadas = Jornada.objects.filter(temporada = temporada)
        return render_to_response('temporada.html', { 'config': get_config(), 'temporada': temporada, 'jornadas': jornadas, } )
    except:
        errors = ['Error al obtener la temporada que empieza en ' + unicode(fecha_ini),]
        for error in sys.exc_info():
            errors.append(error)
        return render_to_response('temporada.html', { 'config': get_config(), 'errores': errors, } )

        
def jornada (request, fecha_ini = None, jornada_id = None):
    try:
        jornada = get_jornada(fecha_ini, jornada_id )
        return render_to_response('jornada.html', { 'config': get_config(), 'jornada': jornada, } )
    except :
        errors = ['No se ha encontrado la jornada para la fecha actual']
        for error in sys.exc_info():
            errors.append(error)
        return render_to_response('jornada.html', { 'config': get_config(), 'errores': errors , } )


#@permission_required('encuestas.puede_votar', login_url="/login/")
@login_required
def quiniela (request, fecha_ini = None, jornada_id = None):
    try:
        quiniela = get_quiniela(request.user,fecha_ini = fecha_ini, jornada_id = jornada_id)
        return render_to_response('quiniela.html', { 'config': get_config(), 'quiniela': quiniela, } )
    except :
        if (jornada_id == None):
            jornada_id = "actual"
        errors = ['No se ha encontrado tu quiniela para la jornada ' + str(jornada_id)]
        for error in sys.exc_info():
            errors.append(error)
        return render_to_response('quiniela.html', { 'config': get_config(), 'errores': errors , } )

class QuinielaForm (ModelForm):
    class Meta:
        model = Quiniela
        fields = ['partidos', 'pleno15']
        
def quiniela_edit(request, jornada = None):
    if request.method == 'POST': # si el formulario ha sido enviado
        form = QuinielaForm (request.POST) # se rellena el formulario con los datos post
        if form.is_valid(): # validacion del formulario
            form.save(commit=True)
            #TODO en lugar de hacer un redirect, hacer render to response pasando la quiniela
            return HttpResponseRedirect('quiniela/' + unicode(form.jornada.id) ) # Redirect after POST
    else:
        try:
            if (jornada == None):
                form = QuinielaForm() # Formulario vacío
            else:
                form = QuinielaForm( Quiniela.objects.get(jornada = jornada) )
        except:
            form = QuinielaForm()
            
    config = get_config()
    return render_to_response('quiniela_form.html', {'form': form, 'config': config, })

        